      !< @file
      !> @brief Ricker wavelet
      !>
      !> Gera a fonte sísmica, representada pela wavelet de Ricker, a partir da frequência de corte.
      subroutine rickerwavelet(tf,nttotal,fcorte,fpico,ampS,tp,St)


      implicit none

      double precision, parameter :: Pi = 4.*atan(1.) !< número Pi

      double precision :: tf!< Tempo final de gravação nos receptores em segundos.
      integer :: nttotal !< número de instantes de tempo total
      double precision :: fcorte !< Frequência de corte em Hz.
      double precision :: fpico !< frequência de pico
      double precision :: ampS !< Amplitude da fonte sísmica.
      double precision :: tp !< Tempo de disparo em segundos.
      double precision :: St(nttotal) !< fonte no domínio do tempo




      double precision :: dt!< intervalo de tempo
      double precision:: t !< tempo
      double precision:: tg !< 
      double precision:: td !< 
      integer :: it !< contador de passos de tempo 

      write(*,*)'# N amostras temporais: ',Nttotal
      write(*,*)'# Ricker wavelet, fcorte=',fcorte



      dt=tf/(dfloat(nttotal))

!       fpico = fcorte/(3.*sqrt(Pi))
!       fcorte = fpico*(3.*sqrt(Pi))
      tg = 2.0*sqrt(Pi)/fcorte


      do it=1,Nttotal
	  t=(it-1)*dt
	  td = t - tp - tg
	  St(it) = ampS*(1.0d0 - 2.0d0*(Pi*fpico*td)**2)*exp(-(Pi*fpico*td)**2)
      enddo


      open(1,file='outfonte0.txt')
      write(1,*)'#tempo, fonte real '
      do it=1,Nttotal
	  write(1,*)dfloat(it-1)*dt,St(it)
      enddo
      close(1)

      write(*,*) 'frequencia de pico ',fpico

      return

      end subroutine rickerwavelet


